GtkAppChooserWidget: Monitor installed applications
authorMatthias Clasen <mclasen@redhat.com>
Wed, 18 Dec 2013 01:34:37 +0000 (20:34 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 18 Dec 2013 03:07:40 +0000 (22:07 -0500)
This uses the new GAppInfoMonitor object in GIO, which provides
change notification when the set of installed applications changes.

gtk/gtkappchooserwidget.c

index d7cc68bd1b11200eeac3635e025621264c70892e..648e9871a361e6674c20e1b6e9115b96db56f8e0 100644 (file)
@@ -85,6 +85,8 @@ struct _GtkAppChooserWidgetPrivate {
   GtkTreeViewColumn *column;
   GtkCellRenderer *padding_renderer;
   GtkCellRenderer *secondary_padding;
+
+  GAppInfoMonitor *monitor;
 };
 
 enum {
@@ -810,6 +812,13 @@ gtk_app_chooser_widget_initialize_items (GtkAppChooserWidget *self)
   gtk_app_chooser_widget_real_add_items (self);
 }
 
+static void
+app_info_changed (GAppInfoMonitor     *monitor,
+                  GtkAppChooserWidget *self)
+{
+  gtk_app_chooser_refresh (GTK_APP_CHOOSER (self));
+}
+
 static void
 gtk_app_chooser_widget_set_property (GObject      *object,
                                      guint         property_id,
@@ -902,6 +911,8 @@ gtk_app_chooser_widget_finalize (GObject *object)
 
   g_free (self->priv->content_type);
   g_free (self->priv->default_text);
+  g_signal_handlers_disconnect_by_func (self->priv->monitor, app_info_changed, self);
+  g_object_unref (self->priv->monitor);
 
   G_OBJECT_CLASS (gtk_app_chooser_widget_parent_class)->finalize (object);
 }
@@ -1128,6 +1139,10 @@ gtk_app_chooser_widget_init (GtkAppChooserWidget *self)
                                           self->priv->secondary_padding,
                                            padding_cell_renderer_func,
                                            NULL, NULL);
+
+  self->priv->monitor = g_app_info_monitor_get ();
+  g_signal_connect (self->priv->monitor, "changed",
+                   G_CALLBACK (app_info_changed), self);
 }
 
 static GAppInfo *